home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / geos / drivers / printers / Shell Printer Drivers.src.lnx / PrinterShell (.txt) < prev    next >
Encoding:
GEOS ConVerT  |  1999-06-16  |  12.4 KB  |  376 lines

  1. pRINTERsHELL
  2. prg FORMATTED geos FILE v1.0
  3. wRITE iMAGE v2.0
  4. GEOwRITE    v2.1
  5. .sOURCE CODE FOR pRINTER sHELL. do not modify.  fOR VIEWING ONLY.
  6. .INCLUDEsHELLzERO
  7. @mOVEdATA
  8. ==$C17E
  9. @start of driver ($7900)
  10. .PSECT
  11. JMPJiNITfORpRINT
  12. JMPJsTARTpRINT
  13. JMPJpRINTbUFFER
  14. JMPJsTOPpRINT
  15. JMPJgETdIMENSIONS
  16. JMPRpRINTtEXT
  17. JMPJsTARTascii
  18. @sETnlq
  19. LDA#$C0
  20. STApRINTmODE
  21. JSRoPENcHANNEL
  22. LDX#MsETnlq
  23. JSRsENDmESSAGE
  24. @cLOSEcHA
  25. NNEL:
  26. JMPRcLOSEcHANNEL;
  27. @eNTRY FIXED AT $7922.
  28. @JiNITfOR
  29. pRINT:
  30. JSRiNITfORpRINT
  31. LDX#0;fIXES BUG IN GEOcALC.
  32. @sENDbYTE
  33. JMPRsENDbYTE;
  34. @eNTRY FIXED AT $792B.
  35. @oPENcHAN
  36. JMPRoPENcHANNEL;
  37. @eNTRY FIXED AT $792E.
  38. @opoFFSET
  39. .BYTE0;oFFSETS USED BY oPENwINDOW (ODD BYTES).
  40. @pRIMARY
  41. .BYTENpRIMARY;
  42. @pARAMETER FIXED AT $7932.
  43. .BYTE7;sECOND OFFSET.
  44. @sECONDAR
  45. .BYTENsECONDARY;
  46. @pARAMETER FIXED AT $7934.
  47. .BYTE14;tHIRD OFFSET.
  48. @pOINTERS
  49. .BLOCK6;tHREE POINTERS TO 640-BYTE CARD BUFFERS.
  50. sTACKsIZE=20;aLL CALLS TO sHELL SUBROUTINES MUST NOT HAVE
  51. @sTACKsAV
  52. E:;USED MORE THAN TWENTY BYTES ON THE STACK.
  53. .BLOCKsTACKsIZE
  54. @JgETdIME
  55. NSIONS:
  56. LDX#cARDSwIDE;
  57. @pARAMETER FIXED AT $7951.
  58. LDY#cARDSlONG;
  59. @pARAMETER FIXED AT $7953.
  60. LDA#0
  61. @sENDmESS
  62. AGE:;
  63. @eNTRY FIXED AT $7957.
  64. LDYmESSAGElENGTH,X;gET LENGTH OF MESSAGE "x".  
  65. @(aT $7958.)
  66. BEQ99$;bRANCH IF MESSAGE LENGTH IS ZERO.
  67. LDAmESSAGEoFFSET,X;gET OFFSET TO MESSAGE "x".
  68. @(aT $795D.)
  69. 10$LDAMESSAGES,X;gET NEXT BYTE OF MESSAGE.
  70. @(aT $7961.)
  71. JSRsENDbYTE;tRANSMIT BYTE TO PRINTER.
  72. INX;sTEP TO NEXT BYTE.
  73. DEY;dECREMENT LENGTH COUNTER.
  74. BNE10$
  75. 99$RTS
  76. @sHIFTpIX
  77. ELS:
  78. @eNTRY FIXED AT $796B.
  79. LDX#23;sHIFT THE PIXELS WITHIN THE wINDOW ONE
  80. 10$ASLwINDOW+48,X;POSITION TO THE LEFT.  tHE NEW PIXELS ON
  81. ROLwINDOW+24,X;THE RIGHT ARE CLEARED.  aFTER 8 SHIFTS, THE
  82. ROLwINDOW,X;RIGHT HAND PANE IS CLEARED AND THE
  83. DEX;SUBROUTINE RETURNS WITH THE z-FLAG SET.
  84. BPL10$
  85. DECpIXELcOUNTER;pIXELcOUNTER IS INITIALIZED BY THE
  86. RTS;SUBROUTINE cOLORwINDOW.
  87. @oPENwIND
  88. OW:
  89. @eNTRY FIXED AT $7979.
  90. STYaCTIVEcOLUMN;sAVE ACTIVE COLUMN MINUS TWO TIMES EIGHT.
  91. LDA#<-8;gET READY IN CASE WE'RE ON COLUMN ONE.
  92. STATEMP
  93. BMI6$;bRANCH IF ON FIRST COLUMN.
  94. ASLA;mAXIMUM VALUE IS 80 SO CARRY IS CLEAR.
  95. ASLA
  96. STATEMP
  97. LDA#0
  98. ROLA
  99. ASLTEMP
  100. ROLA
  101. 6$STATEMP+1
  102. LDX#4
  103. 10$CLC
  104. LDYopoFFSETS,X
  105. LDApOINTERS,X
  106. ADCTEMP;lOW PARAMETER FOR LDA 1234,Y.
  107. STAoPENpANE+7,Y
  108. LDApOINTERS+1,X
  109. ADCTEMP+1;hIGH PARAMETER FOR LDA 1234,Y.
  110. STAoPENpANE+8,Y
  111. BPL10$
  112. ; fALL THROUGH INTO cOLORwINDOW ON NEXT PAGE.
  113. @cOLORwIN
  114. DOW:
  115. @eNTRY FIXED AT $79AA.
  116. LDA#8
  117. STApIXELcOUNTER
  118. JSRoPENrIGHTpANE
  119. JSRoPENmIDpANE
  120. @oPENlEFT
  121. pANE:
  122. LDYaCTIVEcOLUMN;y POINTS TO CURRENT MIDDLE PANE SO
  123. DEY;DECREMENT IT.
  124. JSRsETcOLOR;mODIFY "EOR #0" INSTRUCTION OF oPENpANE.
  125. LDY#$FF;y GETS INCREMENTED TO POINT TO FIRST CARD.
  126. LDA#0;a WILL INDEX INTO LEFT PANE OF WINDOW.
  127. BEQoPENcONT;(aLWAYS)
  128. @oPENmIDp
  129. LDYaCTIVEcOLUMN;y POINTS TO CURRENT MIDDLE PANE.
  130. JSRsETcOLOR;mODIFY "EOR #0" INSTRUCTION OF oPENpANE.
  131. LDY#$07;y GETS INC'ED TO POINT TO SECOND CARD.
  132. LDA#24;a WILL INDEX INTO MIDDLE PANE OF WINDOW.
  133. BNEoPENcONT;(aLWAYS)
  134. @oPENrIGH
  135. TpANE:
  136. LDYaCTIVEcOLUMN;y POINTS TO CURRENT MIDDLE PANE SO
  137. INY;INCREMENT IT.
  138. JSRsETcOLOR;mODIFY "EOR #0" INSTRUCTION OF oPENpANE.
  139. LDY#$0F;y GETS INC'ED TO POINT TO THIRD CARD.
  140. LDA#48;a WILL INDEX INTO RIGHT PANE OF WINDOW.
  141. oPENcONT:
  142. cAfR:ORA#7;oFFSET FOR pREwINDOW IS MODIFIED HERE.
  143. @oPENpANE
  144. LDA#8;cOUNTER FOR EIGHT BYTES PER CARD.
  145. STATEMP
  146. 10$INX
  147. LDA1234,Y;tHIS ADDRESS GETS MODIFIED.
  148. EOR#0;rESERVE FOR COLOR MODIFICATION.
  149. STApREwINDOW+15,X;bOTTOM CARD.
  150. LDA1234,Y;tHIS ADDRESS GETS MODIFIED.
  151. EOR#0;rESERVE FOR COLOR MODIFICATION.
  152. STApREwINDOW+7,X;mIDDLE CARD.
  153. LDA1234,Y;tHIS ADDRESS GETS MODIFIED.
  154. EOR#0;rESERVE FOR COLOR MODIFICATION.
  155. STApREwINDOW-1,X;tOP CARD.
  156. DECTEMP
  157. BNE10$
  158. @sETcOLOR
  159. LDA(R1),Y;gET COLORS FOR BOTTOM CARD OF PANE.
  160. JSRcALCcOLOR;cALCULATE ACTIVE FORE/BACKGROUND PIXELS.
  161. STAoPENpANE+9;oPCODE FOR "LDA" OR "EOR".
  162. STXoPENpANE+10;pARAMETER "$00" OR "$FF".
  163. LDA(R2),Y;gET COLORS FOR MIDDLE CARD OF PANE.
  164. JSRcALCcOLOR;cALCULATE ACTIVE FORE/BACKGROUND PIXELS.
  165. STAoPENpANE+16;oPCODE FOR "LDA" OR "EOR".
  166. STXoPENpANE+17;pARAMETER "$00" OR "$FF".
  167. LDA(R3),Y;gET COLORS FOR TOP CARD OF PANE.
  168. JSRcALCcOLOR;cALCULATE ACTIVE FORE/BACKGROUND PIXELS.
  169. STAoPENpANE+23;oPCODE FOR "LDA" OR "EOR".
  170. STXoPENpANE+24;pARAMETER "$00" OR "$FF".
  171. @cALCcOLO
  172. STYTEMP;tEMP SAVE CURRENT COLUMN POSTION.
  173. sEfI:LDY#0;sELECTfILTER 
  174. @pARAMETER FIXED AT $7A1D.
  175. PHA;tEST FOR A MATCH OF THE FOREGROUND COLOR.
  176. LSRA
  177. LSRA
  178. LSRA
  179. LSRA
  180. CMP#8;cOPY msb OF NYBBLE TO CARRY BIT.
  181. AND#7;tHREE lsbS REMAIN.
  182. LDAcOLORfILTERS,Y;gET lsbYTE OF FOREGROUND FILTER 
  183. @(AT $7A29)
  184. BCC10$;bRANCH IF THAT'S THE ONE WE NEED.
  185. LDAcOLORfILTERS+1,Y;eLSE GET THE msbYTE FILTER.
  186. 10$ANDbITtABLE,X;sEE IF THIS CARD'S COLOR IS ON THE FILTER.
  187. BEQ20$;bRANCH IF NOT WITH acc=0.
  188. LDA#2;eLSE USE 2 AS FOREGROUND PART OF INDEX.
  189. 20$STATEMP+1
  190. PLA;nOW TEST FOR MATCH OF BACKGROUND COLOR.
  191. AND#$0F
  192. CMP#8;cOPY msb OF NYBBLE TO CARRY BIT.
  193. AND#7;tHREE lsbS REMAIN.
  194. LDAcOLORfILTERS+2,Y;gET BACKGROUND FILTER (lsbYTE).
  195. BCC30$;bRANCH IF THAT'S THE ONE WE NEED.
  196. LDAcOLORfILTERS+3,Y;eLSE GET THE msbYTE FILTER.
  197. 30$LDYTEMP+1
  198. ANDbITtABLE,X;sEE IF THIS CARD'S COLOR IS ON THE FILTER.
  199. BEQ40$;bRANCH IF NOT.
  200. INY;eLSE USE 1 AS BACKGROUND PART OF INDEX.
  201. 40$LDAcOLORoPtABLE,Y
  202. LDXcOLORpARMtABLE,Y
  203. LDYTEMP;rESTORE y.
  204. @cOLORoPt
  205. ABLE:
  206. .BYTE$A9,$49,$49,$A9;"LDA", "EOR", "EOR", "LDA".
  207. @cOLORpAR
  208. MtABLE:
  209. .BYTE$00,$FF,$00,$FF
  210. @bITtABLE
  211. .BYTE1,2,4,8,16,32,64,128;
  212. @tABLE STARTS AT $7A62.
  213. @JsTARTas
  214. LDA#$81;sET ascii fLAG.
  215. BNEcONTsTART
  216. @JsTARTpR
  217. LDA#$40;cLEAR ascii fLAG, BUT SET BIT 6 FOR sTOPpRINT.
  218. cONTsTART:STApRINTmODE
  219. JSRoPENcHANNEL;tEST IF PRINTER AVAILABLE.
  220. JSRcLOSEcHANNEL
  221. LDXstatus
  222. BEQpRmO
  223. RTS;eXIT WITH "PRINTER INACCESSIBLE".
  224. pRmO:LDA#0;pRINTmODE 
  225. @pARAMETER STORED A$7A7F.
  226. BPLcONTpRINT
  227. JMPRsTARTtEXT
  228. cONTpRINT:TSX;sAVE STACK POINTER FOR gETbUFFER.
  229. STXsTACKpOINT
  230. JSRgETbUFFER;gET FIRST BUFFER AND VALID POINTERS.
  231. BITpRINTmODE
  232. BVCsETaPPeNV;bRANCH ON BLANK PAGE.
  233. LDA#7;iNITIALIZE cARDfRACTION FOR ONE FULL CARD.
  234. STAcARDfRACTION
  235. LDAR8;sEE IF COLOR PRINTING IS NEEDED.
  236. BNEdObORDER;bRANCH IF SO.
  237. LDY#80;eLSE FILL BOTTOM COLOR BUFFER WITH
  238. bLcO:LDA#$01;BLACK ON WHITE 
  239. @(AT $7A9D).
  240. 110$STA(R1),Y
  241. BNE110$
  242. dObORDER:LDY#81;nOW FILL MIDDLE BUFFER FOR
  243. bOcO:LDA#$11;wHITE ON WHITE 
  244. @(AT $7AA6).
  245. STA(R1),Y;fILL RIGHT BORDER COLOR FOR BOTTOM BUFFER.
  246. 210$STA(R2),Y;fILL MIDDLE COLOR BUFFER FOR BLANK TOP BORDER.
  247. BPL210$
  248. STA(R1),Y;fILL LEFT BORDER COLOR FOR BOTTOM BUFFER.
  249. LDX#4
  250. 220$LDAR5-1,X;iNITIALIZE TOP TWO CARD BUFFER POINTERS.
  251. STApOINTERS+1,X
  252. BNE220$
  253. JSRnEXTbUFFER
  254. JSRpRINTpAGE
  255. @sETaPPeN
  256. LDY#$8F-$22
  257. 10$LDA(R4),Y
  258. STApROGeND-pROGeND+$22,Y;fORCE abs,y MODE ON PAGE ZERO.
  259. BPL10$
  260. JMPcLOSEcHANNEL
  261. @mOVEdOWN
  262. @eNTRY FIXED AT $7ACE
  263. STATEMP;nUMBER OF PIXELS TO MOVE DOWN.
  264. LDX$DC01;tEST FOR MOUSE BUTTON DOWN (TO HALT PRINT).
  265. BNE1111$;bRANCH IF SO.
  266. LDAcARDfRACTION;eLSE CALCULATE FRACTIONAL PART OF CARD
  267. SEC;TO SEE IF NECESSARY TO RETURN TO APPLICATION.
  268. SBCTEMP
  269. BCS999$;bRANCH IF NOT.
  270. 100$PHA
  271. JSRnEXTbUFFER;eLSE GET ANOTHER BUFFER FROM THE APPLICATION.
  272. ADC#8
  273. BCC100$
  274. 999$STAcARDfRACTION
  275. 1111$JSRnEXTbUFFER;mOUSE BUTTON DOWN - CANCEL PRINT. kEEP
  276. BEQ1111$;RETURNING TO APP UNTIL IT NOTICES BUTTON.
  277. @nEXTbUFF
  278. ER:;uPDATE pOINTERS AND GET MORE DATA.
  279. LDY#80;mOVE COLOR BUFFERS UP.
  280. 10$LDA(R2),Y;cOPY MIDDLE COLOR BUFFER
  281. STA(R3),Y;TO TOP COLOR BUFFER.
  282. LDA(R1),Y;cOPY BOTTOM COLOR BUFFER
  283. STA(R2),Y;TO MIDDLE COLOR BUFFER.
  284. BNE10$
  285. LDX#1
  286. 100$LDYpOINTERS+4,X;eXCANGE TOP CARD BUFFER POINTER
  287. LDApOINTERS+2,X;WITH MIDDLE CARD BUFFER POINTER.
  288. STApOINTERS+4,X
  289. STApOINTERS+2,X
  290. BPL100$
  291. BITpRINTmODE;sEE IF THE BOTTOM HAS ALREADY BEEN HIT.
  292. BVS200$;bRANCH IF NOT.
  293. DECpRINTmODE;eLSE KEEP TRACK OF HOW MANY TIMES THRU.
  294. RTS;gO IMMEDIATELY BACK TO DRIVER.
  295. 200$STAR1;cOPY MIDDLE POINTER TO DESTINATION
  296. LDApOINTERS+3;PARAMETER FOR mOVEdATA.
  297. STAR1+1
  298. LDA#>640;nUMBER OF BYTES-TO-MOVE PARAMETER
  299. STAR2+1;FOR mOVEdATA.
  300. LDA#<640
  301. STAR2
  302. JSRsETaPPeNV
  303. JSRmOVEdATA;sOURCE PARAMETER IS ALREADY IN R0.
  304. @gETbUFFE
  305. LDY#sTACKsIZE;rESTORE aPPLICATION ENVIRONMENT.
  306. gb10:DEY
  307. STAsTACKsAVE,Y
  308. sTpO:CPX#0;sTACKpOINT IS MODIFIED HERE.
  309. BCCgb10
  310. STYsTACKpOINT
  311. LDX#0;cLEAR ERROR FLAG.
  312. RTS;bACK TO APPLICATION.
  313. @JsTOPpRI
  314. DECpRINTmODE;$81 FOR ascii, $40 FOR GRAPHICS.
  315. BPL100$;bRANCH IF GRAPHICS MODE.
  316. JMPRsTOPtEXT
  317. 100$LDY#80;fILL BOTTOM COLOR BUFFER WITH
  318. LDAbORDERcOLOR;BORDER COLORS.
  319. 110$STA(R1),Y
  320. BNE110$
  321. BEQsETdRIVEReNV;(aLWAYS)
  322. @JpRINTbU
  323. FFER:
  324. LDAR2+1;sEE IF aPPLICATION AND DRIVER WANT COLOR.
  325. cOfL:AND#0;
  326. @pARAMETER FIXED AT $7B57.
  327. STAR8;lET CALLER KNOW.
  328. BEQ400$;bRANCH IF NOT COLOR.
  329. LDY#0;eLSE PASS 80 BYTES OF COLOR.
  330. 300$LDA(R2),Y;gET COLOR PASSED BY aPPLICATION.
  331. STA(R1),Y;pUT IN BOTTOM COLOR BUFFER.
  332. CPY#80;sEE IF NEAR RIGHT BORDER.
  333. BCC300$;bRANCH IF NOT YET THERE.
  334. 400$LDAR0;aDJUST BOTTOM POINTERS.
  335. STApOINTERS
  336. LDAR0+1
  337. STApOINTERS+1
  338. sETdRIVEReNV:
  339. LDX#<-12;cALCULATE BUFFER POINTERS.
  340. 8$LDAR1+12,X
  341. ADCpOINToFFtABLE+12-256,X;zERO-PAGE MODE.
  342. STAR2+12,X
  343. BNE8$
  344. JSRoPENcHANNEL
  345. LDY#$8F-$22;sAVE A BUNCH OF ZERO PAGE LOCATIONS.
  346. 9$LDApROGeND-pROGeND+$22,Y;fORCE abs,y ON PAGE ZERO.
  347. STA(R4),Y
  348. BPL9$
  349. TSX;rE-CREATE DRIVER'S STACK ENVIRONMENT.
  350. LDYsTACKpOINT
  351. 10$LDAsTACKsAVE,Y
  352. CPY#sTACKsIZE
  353. BCC10$
  354. STXsTACKpOINT
  355. @pOINToFF
  356. tABLE:;tHREE COLOR BUFFERS, ZERO-PAGE BUFFER,
  357. .WORD82,82,82,138,640,640;TWO CARD BUFFERS, GENERAL BUFFER.
  358. .WORDtEXTaDDRESS;
  359. @fIXED AT $7BA8.
  360. .WORDxFACEaDDRESS;
  361. @fIXED AT $7BAA.
  362. .WORDpROGeND;
  363. @fIXED AT $7BAC.
  364. pRINTmODE==pRmO+$7901
  365. sTACKpOINT==sTpO+$7901
  366. cARDfRACTION==cAfR+$7901
  367. cOLORfLAG==cOfL+$7901
  368. sELECTfILTER==sEfI+$7901
  369. bORDERcOLOR==bOcO+$7901
  370. bLACKcOLOR==bLcO+$7901;
  371. @cUSTOM CODE STARTS AT $7BAE.
  372. hgeos pRINTER dRIVER sHELL
  373. pAGE: page
  374. pRINTED ON: dateaT: timefILE: pRINTERsHELL
  375. -----------------------------------------------------------------------------------------------
  376.